﻿#ifndef SYSAUTHORIZATION_H
#define SYSAUTHORIZATION_H

#include <QtGlobal>

#define REG_AUTHORIZATION_PATH_LEN	    1024
#define REG_AUTHORIZATION_FILE_NAME_LEN	80
#define REG_AUTHORIZATION_CROP_USER_LEN	80
#define REG_AUTHORIZATION_PROJECT_LEN	80
#define REG_AUTHORIZATION_USER_LEN		50
#define REG_AUTHORIZATION_SERIAL_LEN1	32
#define REG_AUTHORIZATION_SERIAL_LEN2	40-1
#define REG_AUTHORIZATION_VER_NAME_LEN 	80
#define REG_AUTHORIZATION_VER_MSG_LEN 	2048
#define REG_AUTHORIZATION_PSW_LEN    	80
class Q_DECL_EXPORT SysAuthorization
{
public:
    SysAuthorization();
	/*
	根据错误码返回错误提示字符串
	*/
	static char* GetErrorString(int err);
	/*
	使用加密算法对字符串加密
	输入：入口字符串，入口字符串长度
	输出：加密后的字符串及长度
	*/
	static bool Encrypt(const unsigned char* text,int length,char*& buf,int& buflen);
	/*
	选择不同的加密字符串重新组织字符串
	输入：入口字符串，入口字符串长度，加密方法（有效范围0-9）
	输出：重新组织的字符串及长度
	*/
	static bool EncryptText(const unsigned char* text,int length,int method,char*& buf,int& buflen);
	/*
	写注册文件内容
	输入：工程名，申请人，原始序列，版本，函数调用密码，保存路径
	输出：写注册文件
	*/
	static int WriteFile(char* strProject,char* strUser,char* strOriginalSerial,char * strVesion,char * strVesionMsg,char* password,char* path);
	/*
	根据注册信息有效字符串以及版本信息获取序列号
	输入：注册信息有效字符串，版本
	输出：序列号及长度
	*/
	static int GetFinalStandarSerial(char * strMsg,char * strVesion,char*& buf,int& buflen);
	/*
	根据详细注册信息及版本获取序列号
	输入：工程名，申请人，原始序列，版本，函数调用密码
	输出：序列号及长度
	*/
	static int GetStandarSerial(char* strProject,char* strUser,char* strOriginalSerial,char * strVesion,char * strVesionMsg,char* password,char*& buf,int& buflen);
	/*
	根据详细注册信息及版本组织注册文件内容
	输入：工程名，申请人，序列号，函数调用密码
	输出：注册文件内容及长度（REG_AUTHORIZATION_PROJECT_LEN+REG_AUTHORIZATION_USER_LEN+REG_AUTHORIZATION_SERIAL_LEN1+REG_AUTHORIZATION_SERIAL_LEN2）
	*/
	static int GetAllSerialText(char* strProject,char* strUser,char* strStandarSerial1,char* strStandarSerial2,char *strVer,char * strVesionMsg,char* password,char*& buf,int& buflen);
	/*
	从注册文件读取注册信息
	输入：注册文件完整路径
	输出：工程名及长度，申请人及长度，序列号及长度
	*/
	static int ReadAuthorizationMsg(char* path,char *&strCropUser,int &len_Cropuser,char*& strProject,int& len_project,char*& strUser,int& len_user,char*& strSerial1,int& len_serial1,char*& strSerial2,int& len_serial2,char*& strVer,int& len_ver,char*& strVerMsg,int& len_ver_msg);

	/*
	从序列号到序列文件名称
	输入：序列号
	输出：序列文件名称
	*/
	static bool GetRegSerialName(char *strOriginal,char *&strName,char *strNode=NULL);
};

#endif // SYSAUTHORIZATION_H
